home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 2: Applications / Linux Cubed Series 2 - Applications.iso / editors / emacs / xemacs / xemacs-1.006 / xemacs-1 / lib / xemacs-19.13 / info / oo-browser.info-1 < prev    next >
Encoding:
GNU Info File  |  1995-09-01  |  47.0 KB  |  1,111 lines

  1. This is Info file ../info/oo-browser.info, produced by Makeinfo-1.63
  2. from the input file oo-browser.texi.
  3.  
  4. 
  5. File: oo-browser.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
  6.  
  7. Preface
  8. *******
  9.  
  10. Copyright (C) 1989-1995  Free Software Foundation, Inc.
  11.  
  12.    All trademarks referenced herein are trademarks of their respective
  13. holders.
  14.  
  15.    This edition of the OO-Browser User Manual is for use with any
  16. version 2.9.8 or greater of the OO-Browser.  The OO-Browser is
  17. available for free use, distribution, and modification under the terms
  18. of version 2 or later of the GNU Public License (GPL).  No
  19. representations are made about the suitability of this software for any
  20. purpose.  It is provided "as is" without express or implied warranty.
  21.  
  22.    The OO-Browser was designed and written by Bob Weiner.  Motorola,
  23. Inc. funded and donated this work for free redistribution as part of the
  24. InfoDock integrated productivity toolset.  Torgeir Veimo and Mark Stern
  25. helped write the X OO-Browser core.  Don Yacktman helped write the
  26. NEXTSTEP OO-Browser core.  Jeff Sparkes helped with the Java language
  27. support.
  28.  
  29.    The OO-Browser and InfoDock can be obtained via anonymous ftp on the
  30. Internet from: `/anonymous@cs.uiuc.edu:/pub/xemacs/infodock'.
  31. Installation instructions for the OO-Browser can be found in the
  32. `BR-README' file in the OO-Browser distribution.
  33.  
  34.    This manual documents the user interface and operation of the
  35. OO-Browser multi-language browser.  It assumes a very basic familiarity
  36. in the use of the GNU Emacs editor as documented in `[Stallman 87]'.
  37. It also assumes familiarity with object-oriented software concepts.
  38. However, many technical terms used in this manual are given precise
  39. meaning in the glossary.  *Note Glossary::.  The OO-Browser is meant to
  40. be easy to use, so you can point and click to use it, rather than
  41. learning all of the key stroke commands.
  42.  
  43.    Chapter 1 of the manual focuses on OO-Browser Environments to provide
  44. the reader with a picture of how to organize work for use with the
  45. OO-Browser (*note Working with Environments: Environments.).  *Note
  46. Using the OO-Browser: Usage, if you would rather start with the
  47. interactive features of the browser.  *Note OO-Browser Features:
  48. Features, for a quick overview of the browser's features.
  49.  
  50.    Throughout this manual, sequences of key strokes are delimited by
  51. braces, {}, command names are delimited by parentheses, (), and
  52. variable names are emphasized.
  53.  
  54.    We hope that you enjoy using the OO-Browser and that it improves your
  55. productivity.
  56.  
  57. * Menu:
  58.  
  59. * Introduction::                Introduction
  60. * Environments::                Working with Environments
  61. * Usage::                       Using the OO-Browser
  62. * Options::                     OO-Browser Options
  63. * Customization::               Personal Customization
  64. * Standalone::                  Using Standalone OO-Browser Features
  65. * Languages::                   Language-Specific Notes
  66. * Features::                    OO-Browser Features
  67. * Commands::                    OO-Browser Command Descriptions
  68. * Glossary::                    Glossary
  69. * References::                  References
  70. * Keys::                        Key Binding Index
  71. * Command Index::               Command and Variable Index
  72. * Concepts::                    Concept Index
  73.  
  74.  -- The Detailed Node Listing --
  75.  
  76. Working with Environments
  77.  
  78. * Creating Environments::
  79. * Building Environments::
  80. * Loading Environments::
  81. * Saving Environments::
  82.  
  83. Using the OO-Browser
  84.  
  85. * Invoking::                    Invoking the OO-Browser
  86. * Top-Level Classes::           Displaying Top-Level Classes
  87. * Moving to Entries::
  88. * Saving Listings::             Writing a Listing to a File
  89. * Children and Parents::        Browsing Children and Parents
  90. * Descendants and Ancestors::   Browsing Descendants and Ancestors
  91. * Viewing and Editing::         Viewing and Editing Classes
  92. * Browsing Elements::
  93. * Browsing Categories::
  94. * Browsing Protocols::
  95. * Browsing Implementors::
  96. * Exiting a Listing::
  97. * Quitting and Refreshing::     Quitting and Refreshing the OO-Browser
  98. * Using the Mouse::
  99. * Getting Help::
  100. * Locating Entries::
  101. * Filtering Entries::
  102. * Ordering Entries::
  103. * Statistics::                  Environment and Class Summaries
  104. * Class Info::                  Language-Specific Class Information
  105. * Adding and Deleting Classes::
  106. * Completing Names::
  107. * Graphical Browsing::          Graphical OO-Browser Interfaces
  108.  
  109. OO-Browser Options
  110.  
  111. * External Viewing::            Using An External Viewer or Editor
  112. * Keep Viewed Classes::
  113. * Inhibit Version::             Inhibit Version Screen
  114. * Invert Ancestors::            Invert Ancestor Trees
  115. * Save All::                    Save All Lookup Tables
  116. * Use Children::                Build Children Lookup Table
  117. * Sort Options::                Controlling Class Listing Order
  118.  
  119. Language-Specific Notes
  120.  
  121. * C Specifics::
  122. * C++ Specifics::
  123. * CLOS Specifics::
  124. * Eiffel Specifics::
  125. * Java Specifics::
  126. * Objective-C Specifics::
  127.  
  128. C++ Specifics
  129.  
  130. * C++ Element Selection::       Source Code Element Selection
  131. * C++ Settings::
  132.  
  133. CLOS Specifics
  134.  
  135. * CLOS Method Handling::        Method Handling
  136. * CLOS Settings::
  137.  
  138. Eiffel Specifics
  139.  
  140. * Eiffel Listings::
  141. * Eiffel Element Selection::    Source Code Element Selection
  142. * Eiffel Settings::
  143.  
  144. Objective-C Specifics
  145.  
  146. * Objective-C Categories::
  147. * Objective-C Protocols::
  148. * Objective-C Element Selection::  Source Code Element Selection
  149. * Objective-C Settings::
  150.  
  151. 
  152. File: oo-browser.info,  Node: Introduction,  Next: Environments,  Prev: Top,  Up: Top
  153.  
  154. Introduction
  155. ************
  156.  
  157.    The "OO-Browser" is a multi-windowed, interactive, object-oriented
  158. class browser designed for professional use.  Its user interface is
  159. similar to the well-known Smalltalk browsers `[Goldberg 83]', yet it is
  160. much more flexible and easy to use.
  161.  
  162. The OO-Browser is unique in several respects:
  163.    * It currently supports six object-oriented languages (Eiffel, C++,
  164.      Objective-C, CLOS (Lisp), Java and Smalltalk), one
  165.      non-object-oriented language (C), and one documentation language,
  166.      (GNU Info).
  167.  
  168.    * It may be used for both system exploration and for browsing
  169.      purposes as part of a professional software development tool chest.
  170.  
  171.    * It quickly displays and provides views of complicated inheritance
  172.      trees, making it an important tool for understanding
  173.      object-oriented systems.
  174.  
  175.    * It has a completely direct-manipulation interface with multiple
  176.      modalities.
  177.  
  178.    * It is integrated with a powerful editing environment that can be
  179.      customized to meet personal work styles.
  180.  
  181.    The picture on the following page highlights the major components of
  182. the OO-Browser user interface.  (If you are reading the online Info
  183. version of this manual, see the last paragraph of this node for a link
  184. to the aforementioned picture.)
  185.  
  186.    The windows across the top of the OO-Browser frame are called "class
  187. listing windows"; they display "listing buffers" with a single class
  188. name per line.  The "viewer window" fills the bottom half of the frame.
  189. It is used to display class source and summary information.  It is
  190. also used to display help on the OO-Browser command set.  Pictured here
  191. in the viewer window is part of the browser help buffer, summarizing
  192. its command key bindings.
  193.  
  194.    All key bindings described throughout this manual are effective only
  195. within listing buffers, unless otherwise indicated.  This means that
  196. the keys may not be used within the buffers displayed in the class
  197. viewer window.  Instead, all normal editing keys are available in most
  198. buffers displayed in the viewer window.
  199.  
  200.    Mouse click on the following filename to view a picture of the
  201. textual OO-Browser: "im/oobr-text.eps".  Under InfoDock, use the middle
  202. mouse button.  Under Emacs with the Hyperbole system loaded, use the
  203. shift-middle mouse button or shift-left on a two button mouse.
  204. Otherwise, there is no built-in way to view the picture.
  205.  
  206. 
  207. File: oo-browser.info,  Node: Environments,  Next: Usage,  Prev: Introduction,  Up: Top
  208.  
  209. Working with Environments
  210. *************************
  211.  
  212.    Whenever the OO-Browser is in use, an Environment is selected.  An
  213. Environment may be built or simply specified.  An "Environment
  214. specification" tells the browser what to include in the construction of
  215. an Environment.  (*Note Creating Environments::, for more information.)
  216. An OO-Browser "Environment" includes a set of inter-class relationships
  217. together with a few browser settings.  The phrase, "the Environment",
  218. refers to the current OO-Browser Environment.  Many browser commands
  219. depend on information in the Environment.
  220.  
  221.    The set of classes included in an Environment is specified by two
  222. lists of directories, below which all of the Environment's class source
  223. files are to be found.  (The OO-Browser will automatically search
  224. sub-directories below the directories specified.)  The first list of
  225. directories is called the "Library search list"; it defines the
  226. locations of stable, typically reusable classes that have been released
  227. for general use.  The second list is called the "System search list";
  228. it defines the locations of unreleased classes being developed, often
  229. for a particular system.  All class names within a single Environment
  230. must be unique to ensure proper operation of the browser.
  231.  
  232.    The OO-Browser lets one create, update and save Environments.  Once
  233. an Environment file has been created, it may be loaded at any time.  The
  234. browser will then use this Environment for all of its operations until
  235. another one is loaded.
  236.  
  237.    The browser maintains a separate Environment for each programming
  238. language on which it is used.  Thus, if one switches from Eiffel to C++
  239. browsing and then back to Eiffel browsing, the Eiffel environment will
  240. not need to be reloaded; it will appear immediately and the frame will
  241. appear as if the Eiffel OO-Browser were invoked for the first time.
  242.  
  243.    The recommended default name for Environment files is, `OOBR'.  We
  244. recommend that you store each Environment in the top-level directory of
  245. the first system pathname in the Environment, i.e. the root directory
  246. of a system's code.
  247.  
  248.    Environment files are automatically created and loaded by the
  249. OO-Browser so that you need never become familiar with their format.
  250. You are responsible for remembering which Environment files you create
  251. and for requesting their use whenever desired.  *Note Invoking the
  252. OO-Browser: Invoking, for information on how to specify a different
  253. Environment file for use.
  254.  
  255. * Menu:
  256.  
  257. * Creating Environments::
  258. * Building Environments::
  259. * Loading Environments::
  260. * Saving Environments::
  261.  
  262. 
  263. File: oo-browser.info,  Node: Creating Environments,  Next: Building Environments,  Prev: Environments,  Up: Environments
  264.  
  265. Creating Environments
  266. =====================
  267.  
  268.    Environment specifications are useful when one wants to describe a
  269. number of Environments to the OO-Browser but wants to defer their
  270. construction until later.  Large environments then can be built
  271. overnight.  *Note Building Environments::, for more information.
  272.  
  273.    Every Environment must be specified before it can be built or used.
  274. Thus, specifying an Environment is the first step in creating it.
  275. Environment specifications are created with the {`C-c C-c'}
  276. `(br-env-create)' command, which prompts for all necessary information.
  277. This command may be invoked repeatedly to quickly specify a number of
  278. different Environments.
  279.  
  280. Here are the Environment specification components for which you will be
  281. prompted:
  282. `System search directories'
  283.      List of directories below which other System directories containing
  284.      class source code and directories of class source files may be
  285.      found.
  286.  
  287. `Library search directories'
  288.      List of directories below which Library files of class source code
  289.      and directories of class source files may be found.
  290.  
  291.      *EIFFEL NOTE: We strongly suggest that if you have previous
  292.      versions of library class source below any of these directories,
  293.      that you move them elsewhere, e.g. ISE's Eiffel version "2.1"
  294.      directory of source.  These will cause class naming conflicts that
  295.      the browser will not resolve to your satisfaction.  The basic rule
  296.      is that every class name within a single Environment should be
  297.      unique.  Use {`M-e'} to help find duplicate classes.*
  298.  
  299. 
  300. File: oo-browser.info,  Node: Building Environments,  Next: Loading Environments,  Prev: Creating Environments,  Up: Environments
  301.  
  302. Building Environments
  303. =====================
  304.  
  305.    An Environment specification tells the OO-Browser what to include in
  306. the Environment, but the Environment still must be built before use.
  307. When a new Environment must be built or when a large number of changes
  308. have been made to classes in the Environment, the following commands are
  309. useful:
  310.  
  311. `{C-c C-e}'
  312.      build all Env classes `(br-env-rebuild)'  (This prompts for whether
  313.      or not to use a background process to build the Environment.)
  314.  
  315. `{L}'
  316.      build Env Library classes only `(br-lib-rebuild)'
  317.  
  318. `{S}'
  319.      build Env System classes only `(br-sys-rebuild)'
  320.  
  321.    When class names or locations have changed or the Environment's
  322. inheritance structure is modified, the Environment must be rebuilt.  For
  323. small Environment changes, one may use the class addition and deletion
  324. features of the browser.  *Note Adding and Deleting Classes::, for more
  325. information.
  326.  
  327.    The OO-Browser lets you build large environments in the background so
  328. you can go on to other work while waiting on a build.  When the build is
  329. complete, it will ask you whether you want to browse the built
  330. Environment.
  331.  
  332.    Alternatively, very large Environments may be built overnight by
  333. invoking Emacs in batch mode at a scheduled time.  The shell command
  334. line to use is of the form (substitute your local OO-Browser
  335. installation directory for *<BR-DIR>* below):
  336.      emacs -batch -l <BR-DIR>/br-start.el *Env-Spec-File* \
  337.            ... *Spec File* -f br-env-batch-build > log-file
  338.  
  339. for example:
  340.      emacs -batch -l br-start.el OOBR -f br-env-batch-build > log-file
  341.  
  342.    Typically when using the above command line, one should redirect the
  343. standard output stream to a log file for later examination, as is done
  344. in the above example.  This helps ensure that either the Environment
  345. built successfully or a message indicating the cause of failure is
  346. provided.
  347.  
  348.    Note that the Environment specification file must have been created
  349. prior to execution of this command so that the browser knows what to
  350. build.
  351.  
  352. 
  353. File: oo-browser.info,  Node: Loading Environments,  Next: Saving Environments,  Prev: Building Environments,  Up: Environments
  354.  
  355. Loading Environments
  356. ====================
  357.  
  358.    A new Environment may be loaded for use at any time within the
  359. OO-Browser.  One may either select the load Environment command from the
  360. OO-Browser command summary or simply use the language-specific browser
  361. invocation command originally used to start the browser, except this
  362. time, precede it by a prefix argument.  For example, {`C-u C-c C-e'}
  363. which invokes `(eif-browse)', would prompt for and then load a new
  364. Eiffel environment, even when one is already browsing an Eiffel
  365. environment.
  366.  
  367. 
  368. File: oo-browser.info,  Node: Saving Environments,  Prev: Loading Environments,  Up: Environments
  369.  
  370. Saving Environments
  371. ===================
  372.  
  373.    The OO-Browser automatically builds and saves Environments in most
  374. cases.  Occasionally one may find a need to force the Environment to be
  375. saved to a file, as in the case when one wants to save an Environment
  376. under a different file name.
  377.  
  378.    Use {`C-c C-s'}, the `(br-env-save)' command to force an Environment
  379. save to occur.  The command will prompt for a file to save to, with the
  380. default as the current Environment file name.
  381.  
  382. 
  383. File: oo-browser.info,  Node: Usage,  Next: Options,  Prev: Environments,  Up: Top
  384.  
  385. Using the OO-Browser
  386. ********************
  387.  
  388. * Menu:
  389.  
  390. * Invoking::                    Invoking the OO-Browser
  391. * Top-Level Classes::           Displaying Top-Level Classes
  392. * Moving to Entries::
  393. * Saving Listings::             Writing a Listing to a File
  394. * Children and Parents::        Browsing Children and Parents
  395. * Descendants and Ancestors::   Browsing Descendants and Ancestors
  396. * Viewing and Editing::         Viewing and Editing Classes
  397. * Browsing Elements::
  398. * Browsing Categories::
  399. * Browsing Protocols::
  400. * Browsing Implementors::
  401. * Exiting a Listing::
  402. * Quitting and Refreshing::     Quitting and Refreshing the OO-Browser
  403. * Using the Mouse::
  404. * Getting Help::
  405. * Locating Entries::
  406. * Filtering Entries::
  407. * Ordering Entries::
  408. * Statistics::                  Environment and Class Summaries
  409. * Class Info::                  Language-Specific Class Information
  410. * Adding and Deleting Classes::
  411. * Completing Names::
  412. * Graphical Browsing::          Graphical OO-Browser Interfaces
  413.  
  414. 
  415. File: oo-browser.info,  Node: Invoking,  Next: Top-Level Classes,  Prev: Usage,  Up: Usage
  416.  
  417. Invoking the OO-Browser
  418. =======================
  419.  
  420.    The OO-Browser supports the following languages: C++ or G++, C, Info
  421. (the online manual format), CLOS (Lisp), Eiffel, Objective-C, Java (as
  422. documented in `[Java 95]') and Smalltalk.  The OO-Browser may be used
  423. on source written in any of these languages by using {`C-c C-o'} or, if
  424. that key has not been setup, by using {`M-x oobr RET'}.  This command
  425. will prompt for the language to browse, the Environment specification
  426. of directories to browse, and then will either load the Environment or
  427. build it and then display the set of classes (or nodes) in the
  428. Environment.  (Choose C++ if you are browsing plain C code.)
  429.  
  430.    Alternatively, you can invoke the browser on a specific language
  431. Environment, e.g. to bring back the last Environment browsed under that
  432. language.  The language-specific browser invocation commands are: {`M-x
  433. eif-browse RET'}, {`M-x c++-browse RET'}, {`M-x info-browse RET'},
  434. {`M-x clos-browse RET'}, {`M-x objc-browse RET'}.
  435.  
  436. A prefix argument given to any of these commands will cause it to prompt
  437. for an Environment file to use as the current Environment.
  438.  
  439.    On startup, if the selected Environment has been saved to a file, it
  440. will be loaded; otherwise, the user will be asked to specify the
  441. Environment.  The specification will be saved under the previously given
  442. file name.  The browser will then load this Environment specification
  443. file.
  444.  
  445.    If the browser loads an Environment file and finds only a
  446. specification, it will prompt the user in the minibuffer window with a
  447. request to build the Environment.  It will continue to prompt the user
  448. until a full Environment is built or loaded and then the browser will
  449. start, displaying its multi-windowed interface.  To abort from these
  450. prompts and to cancel the browser invocation request at any time, use
  451. {`C-g'} `(keyboard-quit)', the standard way to abort an unfinished
  452. command within Emacs.
  453.  
  454.    Once an Environment has been loaded, entering and quitting the
  455. browser are rapid actions, allowing a smooth transition between editing
  456. and browsing.
  457.  
  458. 
  459. File: oo-browser.info,  Node: Top-Level Classes,  Next: Moving to Entries,  Prev: Invoking,  Up: Usage
  460.  
  461. Displaying Top-Level Classes
  462. ============================
  463.  
  464.    The OO-Browser starts by displaying all top-level classes in the
  465. Environment.  "Top-level classes" are those that do not inherit from
  466. any others.  The browser can show all top-level classes or System or
  467. Library classes only.  Once in the browser, use:
  468.  
  469. `{s}'
  470.      System top-level classes only
  471.  
  472. `{l}'
  473.      Library top-level classes only
  474.  
  475. `{t}'
  476.      all top-level classes in Environment
  477.  
  478.    Note that selection of any of these commands does not affect the
  479. ancestry or descendancy trees for any given class.  Each simply limits
  480. which trees are easily accessible for browsing.  For example, selection
  481. of Library top-level classes only, followed by the browser show
  482. children command, {`c'} `(br-children)', would display the name of a
  483. System class if the System class directly inherits from the selected
  484. Library class.
  485.  
  486.    To see an ordered listing of all of the classes in a particular part
  487. of an Environment, use a prefix argument with the commands given above:
  488.  
  489. `{C-u s}'
  490.      all System classes
  491.  
  492. `{C-u l}'
  493.      all Library classes
  494.  
  495. `{C-u t}'
  496.      all Environment classes.
  497.  
  498. 
  499. File: oo-browser.info,  Node: Moving to Entries,  Next: Saving Listings,  Prev: Top-Level Classes,  Up: Usage
  500.  
  501. Moving to Entries
  502. =================
  503.  
  504.    Many browser commands operate on the current entry in a listing
  505. window.  {`C-n'} `(br-next-entry)' moves point to the next entry in a
  506. listing buffer.  {`C-p'} `(br-prev-entry)' moves to the previous entry.
  507. Both take prefix arguments and use them as the number of entries by
  508. which to move.
  509.  
  510. 
  511. File: oo-browser.info,  Node: Saving Listings,  Next: Children and Parents,  Prev: Moving to Entries,  Up: Usage
  512.  
  513. Writing a Listing to a File
  514. ===========================
  515.  
  516.    Many standard editing keys are rebound in listing buffers to provide
  517. a useful set of accessible commands.  Nonetheless, one needs to be able
  518. to store and to edit listing buffers.  The {`C-c C-w'}
  519. `(br-write-buffer)' command provides this capability.  The command
  520. prompts for a file name under which to save the current buffer.  One
  521. may then quit the browser, read in the file and edit it as a plain text
  522. file.
  523.  
  524. 
  525. File: oo-browser.info,  Node: Children and Parents,  Next: Descendants and Ancestors,  Prev: Saving Listings,  Up: Usage
  526.  
  527. Browsing Children and Parents
  528. =============================
  529.  
  530.    {`c'} displays the children of the class at point; {`p'} displays
  531. its parents.  {`C-u c'} displays the children of all classes in the
  532. present listing window; {`C-u p'} does the same for parents.
  533.  
  534. 
  535. File: oo-browser.info,  Node: Descendants and Ancestors,  Next: Viewing and Editing,  Prev: Children and Parents,  Up: Usage
  536.  
  537. Browsing Descendants and Ancestors
  538. ==================================
  539.  
  540.    The OO-Browser is very fast at computing ancestor and descendant
  541. hierarchies, accounting for multiple inheritance and cycles where
  542. permitted.  Descendant and ancestor listings provide an immediate
  543. overview of some key relationships among class groupings.
  544.  
  545.    With point on any class entry line in a listing buffer, {`d'} shows
  546. descendants for the class and {`a'} shows ancestors.  {`C-u d'} shows
  547. the descendant trees for all classes in the current listing buffer and
  548. {`C-u a'} does the same for ancestors.
  549.  
  550.    The ancestor tree for a given root class is normally shown branching
  551. out from the root class.  This means that higher-level ancestors, those
  552. further away from the root class, are shown in descending trees below
  553. lower-level ancestors.  The leaves of the tree represent the ancestors
  554. furthest from the root, as one might expect.
  555.  
  556.    This, however, is the inverse of inheritance trees.  Some people
  557. prefer to see ancestor trees like inheritance trees, with parents above
  558. children.  This is an "inverted ancestor tree".  To obtain this view of
  559. ancestors use {`M- -1 a'} for ancestors of the current class.  For
  560. ancestors of all classes in the current buffer, use {`M- -2 a'}, or any
  561. negative prefix argument lest than -1.  Inverted ancestor trees may be
  562. made the default by setting `br-invert-ancestors' non-nil, as in:
  563.  
  564.          {`M-x set-variable RET br-invert-ancestors RET t RET'}
  565.  
  566. This is a personal setting that affects all Environments used by the
  567. browser.
  568.  
  569. 
  570. File: oo-browser.info,  Node: Viewing and Editing,  Next: Browsing Elements,  Prev: Descendants and Ancestors,  Up: Usage
  571.  
  572. Viewing and Editing Classes
  573. ===========================
  574.  
  575.    One of the major uses of the OO-Browser is to view or edit class
  576. source texts.  {`v'} will view the source for the class or element name
  577. at point in a read-only mode in the viewer window; it will not select
  578. the viewer window.  {`e'} does the same, except that it edits the
  579. element source in a read-write mode, if the user has write permission
  580. for the source file.  It also selects the viewer window.
  581.  
  582.    A prefix argument to either of these commands, as in {`C-u v'} or
  583. {`C-u e'}, causes them to prompt for the entry to display.  Full class
  584. and element name completion is provided once an Environment has been
  585. loaded and built.  *Note Completing Names::.
  586.  
  587.    The value of the variable BR-EDIT-FILE-FUNCTION is the function that
  588. the browser calls when a source file entity is displayed for editing.
  589. The value of BR-VIEW-FILE-FUNCTION is the function called to view a
  590. source file entity.  *Note Using an External Viewer or Editor: External
  591. Viewing, for information on using non-Emacs editors and viewers with
  592. the browser.
  593.  
  594.    If a user has no read access rights to a file, this will be apparent
  595. when the browser tries to display the file and fails.  If the user does
  596. not have write permission to the class source file, the standard
  597. BR-EDIT-FILE-FUNCTION may display the file in a read-only mode
  598. (indicated by two percent signs, %%, at the front of the buffer mode
  599. line).  This is a warning that one should not attempt to edit the file.
  600. In some cases, one really wants to try to edit such a file; in those
  601. cases, the buffer may be toggled between read-only and read-write modes
  602. via the Emacs command, `(toggle-read-only)', usually bound to {`C-x
  603. C-q'}.
  604.  
  605.    Once a class has been displayed for viewing, {SPC} will scroll its
  606. source text up (forward) almost a windowful; {DEL} will scroll it down
  607. (backward) almost a windowful.  In fact, this is a general means for
  608. scrolling the OO-Browser viewer window whenever point, as shown by the
  609. Emacs cursor, is in a listing window.  When a class is selected for
  610. editing, {`C-v'} will scroll up, {`M-v'} will scroll down, assuming the
  611. standard Emacs key bindings.
  612.  
  613.    Sometimes one needs to quickly switch back and forth between the
  614. viewer window and the current listing window.  The normal Emacs window
  615. movement commands often are cumbersome in such instances.  Instead
  616. `(br-to-from-viewer)' bound to {`C-c C-v'}, allows the desired back and
  617. forth movement.  It acts as a toggle switch, alternately moving between
  618. the buffer in the viewer window and the prior listing buffer.
  619.  
  620.    By default, the OO-Browser displays class definition files in their
  621. entirety.  If there are multiple classes in a file, you will be able to
  622. scroll through all of them.  If you prefer that only the selected class
  623. be visible, enable the `br-narrow-view-to-class' option flag.  When set
  624. to a non-nil value, this flag narrows the source buffer so that only
  625. the class of interest and its preceding comments are visible.  To
  626. examine other classes in the same file, you must execute a {`C-x n w'}
  627. `(widen)' command when in the narrowed buffer.  (Use {`C-x w'} under
  628. Emacs 18.)
  629.  
  630.    If the browser is used on a small screen, it may be helpful to use
  631. the a full frame to view or edit a buffer of source code.  If point is
  632. in a listing buffer, pressing {`1'}, the number one, will expand the
  633. viewer window buffer to the full frame.  When the browser is
  634. re-invoked, it will look just as it did before.  If point is in the
  635. viewer window, {`C-x 1'} `(delete-other-windows)', will do practically
  636. the same thing, except that when the browser is re-invoked it will not
  637. look precisely as it did before.
  638.  
  639.    If point is in a listing window, the buffer displayed in the viewer
  640. window may be killed with the {`C-c C-k'} `(br-kill)' command.  (A
  641. killed buffer is removed from the current Emacs session.)
  642.  
  643.    If point is in the viewer window, as it will be after editing a class
  644. buffer, use the standard Emacs command {`C-x k'} `(kill-buffer)'
  645. instead.
  646.  
  647. 
  648. File: oo-browser.info,  Node: Browsing Elements,  Next: Browsing Categories,  Prev: Viewing and Editing,  Up: Usage
  649.  
  650. Browsing Elements
  651. =================
  652.  
  653.    A "feature" of a class is either a routine or attribute defined in
  654. the class.  An "element" is either a feature or an instance of a class.
  655. A number of OO-Browser languages support feature browsing, as
  656. documented in *Note Languages::.  Instance browsing is only supported
  657. in very limited form, for class instances which exist within the code
  658. itself.  For example, under Common Lisp and CLOS, a default class called
  659. `[function]' is defined whose instances are all named functions defined
  660. within the environment.  A "default class" is a class created to
  661. categorize elements of the Environment for browsing; default classes
  662. are not specified within the Environment source code.
  663.  
  664.    Use {`f'} to display a listing of the features or elements of the
  665. class at point, including inherited features.  Generally, this includes
  666. only routines.  Use {`M-0 f'} to turn off the display of inherited
  667. features; use the same command again to re-enable display of inherited
  668. features.
  669.  
  670.    If inherited features are off and there are no feature definitions
  671. for the class, the class definition is displayed instead, so that its
  672. feature declarations may be browsed.
  673.  
  674.    Use {`C-u f'} to display a listing of the features or elements of
  675. all classes in the present listing window.  Prior versions of the
  676. OO-Browser used {`r'} to display features.  This key remains for
  677. backward compatibility but may be used for another purpose in the
  678. future.
  679.  
  680.    Move point to an element name and use {`v'} to view its source
  681. definition or {`e'} to edit its source.  Use {`F'} to see the full
  682. signature tag of an element, which includes its argument names and
  683. types, if any.  {`C-u F'} lists the signatures of all elements in the
  684. current listing.  This is handy when several elements from the same
  685. class have the same name but differ in signature.
  686.  
  687.    *Note Using the Mouse::, for how the Action and Assist Keys may be
  688. used for browsing elements.
  689.  
  690. 
  691. File: oo-browser.info,  Node: Browsing Categories,  Next: Browsing Protocols,  Prev: Browsing Elements,  Up: Usage
  692.  
  693. Browsing Categories
  694. ===================
  695.  
  696.    The definition of a "category" is language-specific.  Some languages
  697. such as Smalltalk use categories to group related classes together.  The
  698. OO-Browser does not yet support this kind of category.
  699.  
  700.    A set of Objective-C categories segments a single class into
  701. groupings of related features.  When a class category is defined, the
  702. category name appears within a set of parentheses, so the OO-Browser
  703. displays category names with parentheses around them to distinguish
  704. them from classes.  The aggregation of all of the categories defined by
  705. a class and its ancestors represents the complete class definition.  The
  706. OO-Browser does support this kind of category.
  707.  
  708.    Use the {`C'} key when point is on a class listing entry to obtain a
  709. list of the categories defined for the class within the Environment
  710. source code (this excludes inherited categories).  Use {`C-u C'} to
  711. list the categories for all classes in the current listing.  Thus, to
  712. see the full set of categories for a class, use {`a'} to list the
  713. ancestors of the current class and then {`C-u C'} to show all direct
  714. and inherited categories of the class.
  715.  
  716.    Use {`v'} or {`e'} to view or edit the class category definition
  717. associated with a category entry at point.  *Note Browsing
  718. Implementors::, for an explanation of how to browse the classes that
  719. directly implement a category.
  720.  
  721.    Use {`f'} with point on the default `[category]' class to list all
  722. categories defined in the Environment.
  723.  
  724. 
  725. File: oo-browser.info,  Node: Browsing Protocols,  Next: Browsing Implementors,  Prev: Browsing Categories,  Up: Usage
  726.  
  727. Browsing Protocols
  728. ==================
  729.  
  730.    The definition of a "protocol" is language-specific.  It generally
  731. refers to an interface specification to which a class is said to
  732. conform.  A class conforms to a protocol by implementing the set of
  733. features defined in the protocol.
  734.  
  735.    Presently, the OO-Browser support protocols only under Objective-C.
  736. Objective-C protocols are sometimes called *formal protocols*.
  737. Protocol interfaces are specified in a manner similar to classes but
  738. their features are only implemented in conforming classes.  A single
  739. protocol can inherit from any number of other protocols; thus, any
  740. conforming class must conform to all of its ancestor protocols.
  741.  
  742.    Class definitions list the protocols to which they directly conform,
  743. within a set of angle brackets.  So the OO-Browser displays protocol
  744. names with angle brackets around them to distinguish them from classes.
  745.  
  746.    Use the {`P'} key when point is on a class listing entry to obtain a
  747. list of the protocols to which the class directly conforms (this
  748. excludes inherited protocols).  Use {`C-u P'} to list the direct
  749. protocols for all classes in the current listing.  There is not yet a
  750. way to show the complete set of protocols to which a class conforms,
  751. which includes all protocols inherited from other protocols and all
  752. protocols inherited from ancestor classes.
  753.  
  754.    If you use {`P'} when point is on a class' protocol entry, the
  755. specification of the protocol will be displayed.  Use {`v'} or {`e'} to
  756. view or edit the class or class category definition associated with a
  757. protocol entry at point.
  758.  
  759.    Use standard class browsing keys when on a protocol entry to examine
  760. its parents, children, ancestors or descendants.  *Note Browsing
  761. Implementors::, for an explanation of how to browse the classes that
  762. directly conform to a protocol.
  763.  
  764.    Use {`f'} with point on the default `[protocol]' class to list all
  765. protocols defined in the Environment.
  766.  
  767. 
  768. File: oo-browser.info,  Node: Browsing Implementors,  Next: Exiting a Listing,  Prev: Browsing Protocols,  Up: Usage
  769.  
  770. Browsing Implementors
  771. =====================
  772.  
  773.    Sometimes it is important to see the list of classes that define a
  774. particular element name.  These are called the element's
  775. "implementors".  With point on an element listing, {`I'} will compute
  776. and display the element's implementor list.  {`C-u I'} will do the same
  777. for all elements in the present listing.
  778.  
  779.    Move point to an implementor class name and then use {`v'} or {`e'}
  780. to view or edit the element associated with the class.  If an element
  781. name is defined with different signatures in a single class, the class
  782. will be listed as an implementor multiple times.  Each class entry can
  783. be used to display a different element.  {`C-u F'} will display the
  784. element signature associated with each class entry in the same order as
  785. the class entries in the present listing buffer.
  786.  
  787. 
  788. File: oo-browser.info,  Node: Exiting a Listing,  Next: Quitting and Refreshing,  Prev: Browsing Implementors,  Up: Usage
  789.  
  790. Exiting a Listing
  791. =================
  792.  
  793.    When done with a browser listing buffer, one should clear and exit
  794. from the buffer's display with {`x'}.  This command also displays the
  795. previous listing level, if any, and moves point to its previous
  796. position within this buffer.
  797.  
  798.    In this way, the command provides a quick and clean way to exit back
  799. to a previous listing level; you may exit a single level at a time or
  800. all the way back to the top-level listing buffer through repeated
  801. invocation of the command or by sending a prefix argument value to the
  802. command.
  803.  
  804.    There is no need to exit from listing buffers to quit from the
  805. browser.  You may quit, perform other actions, and then re-invoke the
  806. browser at the same point from which you left.
  807.  
  808. 
  809. File: oo-browser.info,  Node: Quitting and Refreshing,  Next: Using the Mouse,  Prev: Exiting a Listing,  Up: Usage
  810.  
  811. Quitting and Refreshing the OO-Browser
  812. ======================================
  813.  
  814.    {`q'} quits from the browser temporarily.  The same command with a
  815. prefix argument quits from the browser permanently and kills all
  816. non-modified browser buffers.  It will not kill any of the class source
  817. buffers.
  818.  
  819.    If you are familiar with Emacs windowing, you may quickly alter the
  820. window configuration of the frame while in the browser, either
  821. intentionally or more likely unintentionally.  If you execute
  822. non-browser Emacs commands while in the browser, you may find other
  823. buffers have taken the place of your browser buffers.  In either case,
  824. you may refresh the browser display and restore it to the way it was
  825. when you originally invoked it, by using {`M-x br-refresh RET'} or with
  826. {`C-c C-r'} when in a browser listing buffer.
  827.  
  828. 
  829. File: oo-browser.info,  Node: Using the Mouse,  Next: Getting Help,  Prev: Quitting and Refreshing,  Up: Usage
  830.  
  831. Using the Mouse
  832. ===============
  833.  
  834.    Once configured, mouse control within the OO-Browser is helpful and
  835. easy to use.  Under InfoDock, XEmacs and Emacs 19, the right mouse
  836. button, called the Menu Key, pops up a menu of OO-Browser commands when
  837. clicked within an OO-Browser listing buffer.  Under XEmacs and Emacs
  838. 19, the same menu is added to the menubar used in listing buffers.
  839. Under InfoDock with mode-specific menus turned on, the menubar is
  840. devoted to OO-Browser commands.
  841.  
  842.    Even if the above features are not available to you, if you have
  843. mouse support in your Emacs, the following features are available.  A
  844. single mouse button, called the "Action Key", is used for most purposes.
  845. The Action Key is bound to the shift-middle mouse button under standard
  846. Emacs, to the middle mouse button under InfoDock, or to the shift-left
  847. button on a two-button mouse.
  848.  
  849.    A second button, called the "Assist Key", is used for help and other
  850. ancillary functions.  The Assist Key is bound to the shift-right button.
  851. The `br-help-ms' file uses a table format to summarize mouse control
  852. within the browser, it may be displayed within the browser via the
  853. {`H'} `(br-help-ms)' command.
  854.  
  855.    Within an empty listing buffer, clicking the Action Key displays the
  856. browser command menu; the Assist Key displays a menu listing
  857. language-specific source files.  Within this menu, the Action Key
  858. selects a buffer for display, the Assist Key marks the buffer for
  859. deletion.  To perform the deletes, click the Action Key after the last
  860. line of the menu.  If the Assist Key is clicked after the last line, the
  861. deletes are undone and a list of all current editor buffers is shown,
  862. allowing you to select buffers other than those containing classes.
  863.  
  864.    The mouse buttons can be used to scroll the viewer window a page at a
  865. time by clicking after the end of any line.  The Action Key scrolls the
  866. window up (forward) a windowful and the Assist Key scrolls it down
  867. (backward) a windowful.
  868.  
  869.    The Action Key acts as follows when in an OO-Browser listing buffer.
  870. If the button is pressed:
  871.  
  872.    * on a blank line following all entries or in a blank listing
  873.      buffer, the browser command help menu is displayed in the viewer
  874.      window exited;
  875.  
  876.    * at the beginning of a (non-single character) class name, the class'
  877.      ancestors are listed;
  878.  
  879.    * at the end of an entry line, the listing is scrolled up;
  880.  
  881.    * on the `...', following a class name, point is moved to the class
  882.      descendency expansion;
  883.  
  884.    * before an element name, the implementor classes of the name are
  885.      listed;
  886.  
  887.    * anywhere else on an entry line (i.e. on the entry), the entry's
  888.      source is displayed for editing.
  889.  
  890.    The Assist Key acts as follows when in a listing buffer.  If it is
  891. pressed:
  892.  
  893.    * in a blank buffer, a selection list of buffer files is displayed;
  894.  
  895.    * at the beginning of a (non-single character) class, the class'
  896.      descendants are listed;
  897.  
  898.    * at the end of an entry line, the listing is scrolled down;
  899.  
  900.    * on the `...', following a class name, point is moved to the class
  901.      expansion;
  902.  
  903.    * anywhere else on a class line, the class' elements are listed;
  904.  
  905.    * anywhere else on an element line, the element's implementor
  906.      classes are listed;
  907.  
  908.    * on a blank line following all entries, the current listing buffer
  909.      is exited.
  910.  
  911. 
  912. File: oo-browser.info,  Node: Getting Help,  Next: Locating Entries,  Prev: Using the Mouse,  Up: Usage
  913.  
  914. Getting Help
  915. ============
  916.  
  917.    The OO-Browser is very intuitive to operate, but help is always a
  918. key or button press away when needed.  Besides the online and printed
  919. versions of this manual, there is an online quick reference built into
  920. the OO-Browser.  Once the browser windows appear, press {`h'} at any
  921. time to bring up a buffer full of command help.
  922.  
  923.    For more extensive documentation on each browser key, use the Emacs
  924. command {`C-h k KEY-SEQUENCE'}.
  925.  
  926. 
  927. File: oo-browser.info,  Node: Locating Entries,  Next: Filtering Entries,  Prev: Getting Help,  Up: Usage
  928.  
  929. Locating Entries
  930. ================
  931.  
  932.    The {`w'} `(br-where)' command can be used to locate the source file
  933. associated with a listing entry.  It prints the full pathname of the
  934. source file in the minibuffer window.  A prefix argument as in, {`C-u
  935. w'}, causes the command to prompt for the class or element name to
  936. locate.  Full completion is provided.  *Note Completing Names::.
  937.  
  938.    The {`m'} `(br-match)' command provides a quick mechanism for
  939. locating any classes in the Environment whose names match to an
  940. expression in part or in whole.  The browser will prompt for the
  941. expression to use.  All matching names are displayed in ascending order.
  942.  
  943.    By default the expression is treated as a regular expression.  A
  944. prefix argument sent to the command tells it to treat the expression as
  945. a string.
  946.  
  947.    After each search, the command reports the number of matching classes
  948. found and displays them in the current listing window.  It then prompts
  949. for another expression to key on.  The selected set is then filtered
  950. once again.  This cycle continues until the {RET} is pressed without
  951. giving an expression.  This process allows for easy location of desired
  952. classes.
  953.  
  954.    When the command is invoked (first time through the loop), if the
  955. {RET} key is pressed without giving a match expression, the search will
  956. match to all classes referenced in the Environment.
  957.  
  958.    If you want a regular expression to match to whole class names
  959. exclusively, begin it with a '^' and end it with a '$' character which
  960. match to beginning of name and end of name, respectively.  Thus,
  961. "^....$" would match to class names with exactly four characters.  A
  962. string match always matches to any class name that contains the matching
  963. string.
  964.  
  965. 
  966. File: oo-browser.info,  Node: Filtering Entries,  Next: Ordering Entries,  Prev: Locating Entries,  Up: Usage
  967.  
  968. Filtering Entries
  969. =================
  970.  
  971.    The {`M'} `(br-match-entries)' command works much like the
  972. `(br-match') command described in, *Note Locating Entries::, except
  973. that it matches only to entries in the current listing buffer.  It thus
  974. allows you to filter a listing to just those entries that you care to
  975. browse.  It prompts you for a regular expression of entries to match
  976. and then deletes entries that don't match.  A prefix argument sent to
  977. the command tells it to treat the match expression as a string.
  978.  
  979.    After each search, the command reports the number of matching entries
  980. found and displays them in the current listing window.  It then prompts
  981. for another expression to match.  The selected set is then filtered
  982. once again.  This cycle continues until the {RET} is pressed without
  983. giving an expression.  This process allows for easy incremental
  984. filtering of listings.
  985.  
  986.    When the command is invoked (first time through the loop), if the
  987. {RET} key is pressed without giving a match expression, the search will
  988. match to all entries in the listing, so no filtering will be done.
  989.  
  990.    If you want a regular expression to match to whole entries
  991. exclusively, begin it with a '^' and end it with a '$' character which
  992. match to beginning of line and end of line, respectively.  Thus,
  993. "^....$" would match to entry lines with exactly four characters.  A
  994. string match always matches to any entry that contains the matching
  995. string.
  996.  
  997. 
  998. File: oo-browser.info,  Node: Ordering Entries,  Next: Statistics,  Prev: Filtering Entries,  Up: Usage
  999.  
  1000. Ordering Entries
  1001. ================
  1002.  
  1003.    Once you have a desired set of names in a browser listing window, you
  1004. may want to re-order.  For a simple ascending order sort by name, use
  1005. {`o'}.  To sort the lines in the current listing window accounting for
  1006. leading whitespace, use a positive prefix argument.  To sort the lines
  1007. in descending order accounting for leading whitespace, use a negative
  1008. prefix argument.  Note that all of the top-level class display commands
  1009. automatically order their output lists.  *Note Displaying Top-Level
  1010. Classes: Top-Level Classes.
  1011.  
  1012.    To sort in descending order, first sort into ascending order with
  1013. {`o'} to strip any leading whitespace and then use a negative prefix
  1014. argument to sort the names into descending order.
  1015.  
  1016. 
  1017. File: oo-browser.info,  Node: Statistics,  Next: Class Info,  Prev: Ordering Entries,  Up: Usage
  1018.  
  1019. Environment and Class Summaries
  1020. ===============================
  1021.  
  1022.    The {`#'} `(br-count)' command displays in the minibuffer the number
  1023. of entries in the present listing buffer.
  1024.  
  1025.    The {`M-c'} `(br-class-stats)' command displays in the minibuffer
  1026. window the number of parents and children for the selected class; with
  1027. a prefix argument, it prompts for the class name to use.
  1028.  
  1029.    The {`M-e'} `(br-env-stats)' command displays the specification for
  1030. the current Environment along with a few Environment statistics
  1031. (OO-Browser version used to build the Environment, total classes,
  1032. number of System and Library classes, number of duplicate and undefined
  1033. classes) in the viewer window.  With a prefix argument, it displays in
  1034. the minibuffer window the basic statistics only, leaving the contents
  1035. of the viewer window intact.
  1036.  
  1037. 
  1038. File: oo-browser.info,  Node: Class Info,  Next: Adding and Deleting Classes,  Prev: Statistics,  Up: Usage
  1039.  
  1040. Language-Specific Class Information
  1041. ===================================
  1042.  
  1043.    Presently, this feature is available only for Eiffel browsing.
  1044.  
  1045.    With point on a class name in a listing buffer, the command, {`i'}
  1046. `(br-entry-info)', displays the class' parents, attributes and routines
  1047. with routine call summaries.  This is its default behavior.
  1048.  
  1049.    {`M-x eif-info-use-short'} will instead cause the `(br-entry-info)'
  1050. command to run the Eiffel 'short' command on a class, thereby
  1051. displaying its specification.  {`M-x eif-info-use-flat'}, will cause
  1052. the command to run the Eiffel 'flat' command on a class, thereby
  1053. displaying its complete feature set.  Use {`M-x eif-info-use-calls'} to
  1054. reset this command to its default behavior.
  1055.  
  1056. 
  1057. File: oo-browser.info,  Node: Adding and Deleting Classes,  Next: Completing Names,  Prev: Class Info,  Up: Usage
  1058.  
  1059. Adding and Deleting Classes
  1060. ===========================
  1061.  
  1062.    A file containing class definitions may be added to the Environment
  1063. with the {`C-c ^'} `(br-add-class-file)' command.  This will prompt for
  1064. the file name, scan the file, and then update the Environment.  If a
  1065. class defined in the file is already in the Environment, its
  1066. information will be replaced with the information gathered from the
  1067. file; otherwise, the class will be added to the Environment.  This
  1068. command does not update the browser display; one must issue a browser
  1069. command after the add command in order to see any change.
  1070.  
  1071.    To add a single class from a file containing multiple classes, read
  1072. the file into an Emacs buffer, narrow the buffer to the desired class
  1073. and then execute the add command.  *Note Narrowing: (emacs)Narrowing.
  1074.  
  1075.    {`C-c ^'} is normally globally bound in the OO-Browser
  1076. initialization file, `br-init.el', so that it may be used outside of
  1077. the browser when editing classes.
  1078.  
  1079.    To delete a class from the Environment, display the class name in a
  1080. listing window using the {`m'} `(br-match)' command if necessary.
  1081. (*Note Locating Entries::.)  Move point to the desired class name and
  1082. hit {`C-c C-d'} `(br-delete)' to delete the class.  This will remove
  1083. the class name at point after the class is deleted from the Environment.
  1084.  
  1085. 
  1086. File: oo-browser.info,  Node: Completing Names,  Next: Graphical Browsing,  Prev: Adding and Deleting Classes,  Up: Usage
  1087.  
  1088. Completing Names
  1089. ================
  1090.  
  1091.    Whenever the browser prompts for a name and an Environment has
  1092. already been loaded or built, one may use the browser's identifier name
  1093. completion facilities to help in entering the name.  These features
  1094. allow you to type as much of the name as you know and then have the
  1095. browser fill in what it can.  The relevant keys are:
  1096.  
  1097. {TAB}
  1098.      complete as much as possible of a class or element name
  1099.  
  1100. {SPC}
  1101.      complete up to one word of the class or element name
  1102.  
  1103. {`?'}
  1104.      show all possible completions for class or element name
  1105.  
  1106.    You may also use the browser's completion facilities outside of the
  1107. browser, for example, when editing code.  *Note Using Standalone
  1108. OO-Browser Features: Standalone, and the description of
  1109. `(br-complete-type)'.
  1110.  
  1111.